package cn.tedu.csmall.business.service.impl;

import cn.tedu.csmall.business.service.IBusinessService;
import cn.tedu.csmall.commons.pojo.order.dto.OrderAddDTO;
import cn.tedu.csmall.commons.pojo.order.entity.Order;
import cn.tedu.csmall.order.service.IOrderService;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class BusinessServiceImpl implements IBusinessService {

    //在命名上添加dubbo表示此对象是由dubbo进行远程调用的
    @DubboReference
    private IOrderService dubboOrderService;

    //业务逻辑层方法上添加这个注解，相当于设置值Seata分布式事务的七点，时AT模型中的TM(事务管理器)
    //从当前方法开始所有远程调用的方法中对数据库的操作都在同一个事务当中。
    @GlobalTransactional
    @Override
    public void buy(OrderAddDTO orderAddDTO) {
        //编写新增订单业务雏形
        //实例化新增的订单对象
        dubboOrderService.orderAdd(orderAddDTO);
        //这个实例好的DTO对象，后期会发送到order模块用来新增订单
        log.info("生成的订单信息:{}",orderAddDTO); //info默认显示级别。
    }

}
